package com.ruoyi.file.service.impl;

import com.ruoyi.file.domain.SysFile;
import com.ruoyi.file.mapper.SysFileMapper;
import com.ruoyi.file.service.IFileService;
import com.ruoyi.file.domain.FileType;
import com.ruoyi.file.utils.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartFile;

/**
 * AbstractIFileService 抽取类
 * 根据filetype 实例化具体oss对象
 *
 * @author 作者 huangfy E-mail: 292069228@qq.com
 */
@Slf4j
public abstract class AbstractIFileService implements IFileService {

	@Autowired
	protected SysFileMapper sysFileMapper;

	@Override
	public SysFile upload(MultipartFile file  ) throws Exception {
		SysFile fileInfo = FileUtil.getFileInfo(file);
		SysFile oldFileInfo = sysFileMapper.selectSysFileById(fileInfo.getId());
		if (oldFileInfo != null) {
			return oldFileInfo;
		}
//		if (!fileInfo.getName().contains(".")) {
//			throw new IllegalArgumentException("缺少后缀名");
//		}
		uploadFile(file, fileInfo);
		fileInfo.setSource(fileType().name());// 设置文件来源
		sysFileMapper.insertSysFile(fileInfo);// 将文件信息保存到数据库

		return fileInfo;
	}

	/**
	 * 文件来源
	 * 
	 * @return
	 */
	protected abstract FileType fileType();

	/**
	 * 上传文件
	 * 
	 * @param file
	 * @param fileInfo
	 */
	protected abstract void uploadFile(MultipartFile file, SysFile fileInfo) throws Exception;

	/**
	 * 删除文件资源
	 * 
	 * @param fileInfo
	 * @return
	 */
	protected abstract boolean deleteFile(SysFile fileInfo);
}
